//
//  JSViewController57.swift
//  RXSwiftTest
//
//  Created by ZhangBo on 2019/4/15.
//  Copyright © 2019 ZhangBo. All rights reserved.
//

import UIKit
import RxSwift
import RxCocoa

class JSViewController57: UIViewController {

    //表格
    var tableView: UITableView!

    let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()

//        test_1()
//        test_2()
        test_3()
    }

}

extension JSViewController57 {
    private func test_1() {
        //创建表格视图
        self.tableView = UITableView(frame: self.view.frame, style: .plain)
        //创建一个重用的单元格
        self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
        self.view.addSubview(self.tableView!)

        //设置尾部刷新控件
        self.tableView.mj_footer = MJRefreshBackNormalFooter()

        let driver = self.tableView.mj_footer.rx.refreshing.asDriver()
        //初始化ViewModel
        let viewModel = JSViewModel57_1(footerRefresh: driver,
            dependency: (disposeBag: self.disposeBag, networkService: NetworkService()))

        //单元格数据的绑定
        viewModel.tableData.asDriver().drive(tableView.rx.items) { (tableView, row, element) in
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
            cell.textLabel?.text = "\(row + 1)、\(element)"
            return cell
        }.disposed(by: disposeBag)

        //上拉刷新状态结束的绑定
        let end = self.tableView.mj_footer.rx.endRefreshing
        viewModel.endFooterRefreshing.drive(end).disposed(by: disposeBag)
    }

    private func test_2() {
        //创建表格视图
        self.tableView = UITableView(frame: self.view.frame, style: .plain)
        //创建一个重用的单元格
        self.tableView!.register(UITableViewCell.self,
            forCellReuseIdentifier: "Cell")
        self.view.addSubview(self.tableView!)

        //设置头部刷新控件
        self.tableView.mj_header = MJRefreshNormalHeader()
        //设置尾部刷新控件
        self.tableView.mj_footer = MJRefreshBackNormalFooter()

        //初始化ViewModel
        let viewModel = JSViewModel57_2(input: (
            headerRefresh: self.tableView.mj_header.rx.refreshing.asDriver(),
            footerRefresh: self.tableView.mj_footer.rx.refreshing.asDriver()),
            dependency: (disposeBag: self.disposeBag, networkService: NetworkService()))

        //单元格数据的绑定
        viewModel.tableData.asDriver().drive(tableView.rx.items) { (tableView, row, element) in
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
            cell.textLabel?.text = "\(row + 1)、\(element)"
            return cell
        }.disposed(by: disposeBag)

        //下拉刷新状态结束的绑定
        viewModel.endHeaderRefreshing.drive(self.tableView.mj_header.rx.endRefreshing)
            .disposed(by: disposeBag)

        //上拉刷新状态结束的绑定
        viewModel.endFooterRefreshing.drive(self.tableView.mj_footer.rx.endRefreshing)
            .disposed(by: disposeBag)
    }

    private func test_3() {
        //创建表格视图
        self.tableView = UITableView(frame: self.view.frame, style: .plain)
        //创建一个重用的单元格
        self.tableView!.register(UITableViewCell.self,
            forCellReuseIdentifier: "Cell")
        self.view.addSubview(self.tableView!)

        //设置头部刷新控件
        self.tableView.mj_header = MJRefreshNormalHeader()
        //设置尾部刷新控件
        self.tableView.mj_footer = MJRefreshBackNormalFooter()

        //初始化ViewModel
        let viewModel = JSViewModel57_3(input: (
            headerRefresh: self.tableView.mj_header.rx.refreshing.asObservable(),
            footerRefresh: self.tableView.mj_footer.rx.refreshing.asObservable()),
            dependency: (disposeBag: self.disposeBag, networkService: NetworkService()))

        //单元格数据的绑定
        viewModel.tableData.bind(to: tableView.rx.items) { (tableView, row, element) in
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
            cell.textLabel?.text = "\(row + 1)、\(element)"
            return cell
        }.disposed(by: disposeBag)

        //下拉刷新状态结束的绑定
        viewModel.endHeaderRefreshing.bind(to: self.tableView.mj_header.rx.endRefreshing)
            .disposed(by: disposeBag)

        //上拉刷新状态结束的绑定
        viewModel.endFooterRefreshing.bind(to: self.tableView.mj_footer.rx.endRefreshing)
            .disposed(by: disposeBag)
    }
}


